package com.gite.nouette.admin.contract.integrator.factory;

import com.gite.nouette.admin.contract.model.IAdmin;
import com.gite.nouette.admin.contract.model.ICommand;
import com.gite.nouette.admin.contract.model.IContainerModule;
import com.gite.nouette.admin.contract.model.IHandlerModule;
import com.gite.nouette.admin.contract.model.IManager;
import com.gite.nouette.admin.contract.model.command.ICommandCreateModule;
import com.gite.nouette.admin.contract.model.command.ICommandModule;
import com.gite.nouette.admin.contract.model.command.ICommandRemoveModule;
import com.gite.nouette.admin.contract.model.command.IStateCommandActivation;
import com.gite.nouette.admin.contract.model.module.IModuleError;
import com.gite.nouette.admin.contract.model.module.IModuleLog;
import com.gite.nouette.admin.contract.observer.IObservable;

public interface IFactoryModel {

	IAdmin getAdmin();

	IManager getManager();

	IHandlerModule getHandlerModule();

	IContainerModule getContainerModule();

	IModuleLog getModuleLog(ICommandModule... headerCommands);

	IModuleError getModuleError(ICommandModule... headerCommands);

	ICommandCreateModule getCommandCreateModule();

	ICommandRemoveModule getCommandRemoveModule();

	IStateCommandActivation getStateCommandActive();

	IStateCommandActivation getStateCommandDesactive();

	<O> IObservable<O> getObservable(O o);

	IObservable<ICommand> getObservableCommand(ICommand command);

}
